TiDB可以同步MySQL的資料異動,那麼能不能反過來讓其他DB同步隨著TiDB異動呢。
答案是可以的,TiDB提供了CDC來滿足此類需求,TiCDC可透過建立多個任務,來同步其他DB或者中間層,例如另一個TiDB,MySQL,Kafka等等。這邊我主要用MySQL來實作。
首先一樣透過tiup安裝cdc,在這邊可以使用tiup cluster scale-out指令來擴充,把cdc的設定寫在scale_out.yaml裡,或者修改原本deploy的yaml檔,另建一組新的cluster。
一樣都在yaml檔內加上cdc相關設定,我加上了兩台cdc server。
cdc_servers:
- host: 10.102.1.200
- host: 10.102.1.201
如果用scale-out則輸入
tiup cluster scale-out tidb-test ./scale_out.yaml
如果是重建cluster,則一樣使用deploy
tiup cluster deploy tidb-test v5.1.0 ./topo.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]
安裝好cdc之後,先查詢一下capture的list,記得在ctl後面要加上:你安裝的版本才能用。
tiup ctl:v5.2.1 cdc capture list --pd=http://10.102.1.92:2379
接下來就是新增一個資料同步的任務,指令中填入自己連結到mysql的帳密以及ip位置,另外記得後面加上?timezone=字樣,不然會噴錯。
tiup ctl:v5.2.1 cdc changefeed create --pd=http://10.102.1.92:2379 --sink-uri="mysql://tidb_rep:Orz@9487@10.102.1.4:3306/?timezone=" --config=~/cdc.toml --start-ts=0
指令中的config使用的cdc.toml,裡頭可以讓你設定要執行cdc的白名單,這邊我簡單的只針對test.*做讀取
[filter]
rules = ['test.*']
可以透過指令來看現在的執行情況。透過message的回應來檢視執行上是否正常。
比如我在tidb上insert了一筆資料,然後執行指令觀察情況。
tiup ctl:v5.2.1 cdc changefeed list --pd=http://10.102.1.92:2379
發現原來我的帳號沒有足夠的權限作Insert。
新增完權限之後,再試一次。可以看到tidb的資料異動確實的呈現在MySQL。